package com.sc.nft.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.EcologyCastConf;
import com.sc.nft.entity.EcologyCastExpendConf;
import com.sc.nft.entity.req.AddAndUpdateCastWayConfRequest;
import com.sc.nft.entity.vo.AdminSimpleCastCollectionVO;
import com.sc.nft.entity.vo.ecology.*;

import java.util.Date;
import java.util.List;

public interface AdminEcologyCastConfService {

    /**
     * 新增生态铸造配置
     * @param ecologyCastConf
     * @param castWayList
     */
    void addAndUpdateCastConf(EcologyCastConf ecologyCastConf, List<AddAndUpdateCastWayConfRequest> castWayList);

    /**
     * 分页获取生态铸造配置
     * @param collectionName
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<AdminGetPageCastConfVO> getPageCastConf(String collectionName, Integer pageNo, Integer pageSize);

    /**
     * 获取生态铸造配置详情
     * @param id
     * @return
     */
    AdminCastConfDetailsVO getCastConfDetails(Long id);

    /**
     * 删除生态铸造消耗配置
     * @param id
     */
    void delExpendById(Long id);

    /**
     * 修改生态铸造配置上下架
     * @param id
     * @param status
     */
    void updateCastConfStatusgById(Long id, Boolean status);

    /**
     * 修改生态铸造配置排序
     * @param id
     * @param sort
     */
    void updateCastConfSortById(Long id, Long sort);

    /**
     * 删除生态铸造配置
     * @param id
     */
    void delCastConfById(Long id);

    /**
     * 获取用户 生态铸造记录
     * @param collectionName
     * @param userTel
     * @param startTime
     * @param endTime
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<AdminEcologyCastUserRecordsVO> getPageUserRecordsRecords(String collectionName, String userTel, String startTime, String endTime, Integer pageNo, Integer pageSize);

    /**
     * 获取用户 生态铸造记录 导出
     * @param collectionName
     * @param userTel
     * @param startTime
     * @param endTime
     * @return
     */
    List<AdminEcologyCastUserRecordsVO> getPageUserRecordsExport(String collectionName, String userTel, String startTime, String endTime);

    /**
     * 用户铸造上限(汇总)
     * @param userTel
     * @return
     */
    List<AdminUserEcologyCastUpperLimitDetailsVO> userEcologyCastUpperLimitDetails(String userTel);

    /**
     * 用户铸造上限记录(详情
     * @param userId
     * @param collectionId
     * @param beginTime
     * @param endTime
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<AdminUserEcologyCastUpperLimitPageVO> userEcologyCastUpperLimitPage(Long userId, Long collectionId, Date beginTime, Date endTime, Integer pageNo, Integer pageSize);

    /**
     * 获取简单的铸造藏品列表
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<AdminSimpleCastCollectionVO> getSimplePage(Integer pageNo, Integer pageSize);

    /**
     * 初始化铸造上限
     */
    void initCastUpperLimit();
}
